package com.itheima.edu.info.manager.dao;

import com.itheima.edu.info.manager.domain.Student;
/*
库管类专门负责处理数据
1.接收业务员传过来的业务数据
2.将数据拿到系统数据仓库中进行增删改查
3.将处理的结果给到业务员
 */
public class StudentDao implements BaseStudentDao{
    //1.定义一个系统数据仓库,数组实现
    private static Student[] stus = new Student[5];
    //静态代码块:随着类的加载而加载,自动执行!
    //作用,一般用来数据的初始化,系统配置的加载
    static{
        System.out.println("-------------系统数据加载中Loading--------------");
        Student stu1 = new Student("heima001","柳岩","28","1998-11-11");
        Student stu2 = new Student("heima002","柳岩","28","1998-11-11");
    //将学生对象存入数组容器
        stus[0] = stu1;
        stus[1] = stu2;
    }
    //库管类中的添加学生功能
    public boolean addStudnet(Student stu) {

        //2.通过标记为思想来确定本次要添加的学生对象应存入的位置
        //先假设数组已经存满了
        int index = -1;
        //遍历数组容器
        for (int i = 0; i < stus.length; i++) {
            //获取每一个索引位置的元素,只要当前索引位置的值为null,说明位置空着,还可以存数据
            if (stus[i] == null){
                //将当前位置记录到index
                index =i;
                break;
            }
        }
//3.根据index的值来决定本次添加结果
        if (index == -1){
            //存满了,本次无法添加,返回false
            return false;
        }else{
            //不是-1,说明数组还可以存信息
            //将本次要添加的学生对象存入数组
            stus[index] = stu;
            //返回true,表示添加成功
            return true;
        }
    }
//库管类中的查看学生功能
    public Student[] findAllStudent() {
        return stus;
    }
//库管类中的删除学生功能
    public boolean deleteStudent(String deleteId) {
        //1.找到本次要删除的学号对应的学生对象在数组中对应的索引位置
        int index = getIndex(deleteId);
        //2.根据index 的值来决定是否删除成功
        if (index ==-1){
            //说明传过来的学号不存在,直接返回false表示删除失败
            return false;
        }else{
            //不是-1,说明传过来的学号在系统中存在,将该索引位置置为null,表示删除
            stus[index] = null;
            return true;
        }
    }
//库管类修改学生功能
    public boolean updateStudent(String updateId, Student newStu) {
   //1.根据要修改的学号找到对应的学生在数组中的索引位置
        int index = getIndex(updateId);
        //2.根据index 的值来决定是否修改成功
        if (index ==-1){
            //说明传过来的学号不存在,直接返回false表示修改失败
            return false;
        }else{
            //不是-1,说明传过来的学号在系统中存在,将该索引位置置为newStu,表示修改
            //2.拿新的学生对象去替换该索引位置原本的老对象,达到修改的目的
            stus[index] = newStu;
            return true;
        }
    }
    //封装一个根据学号查找学生对象在数组中的索引位置的方法
    public int getIndex(String id){
        //先假设要删除的学号不存在
        int index = -1;
        //遍历数组
        for (int i = 0; i < stus.length; i++) {
            Student stu = stus[i];
            //当前索引位置的元素不为null并且该元素的学号和要删除的学号一致,修改标记
            if (stu != null && stu.getId().equals(id)){
                //修改标记,记录当前学生对象的索引值
                index = i;
                break;
            }
        }
        //返回index即可
        return index;
    }
}
